/**
 * Created by PanJiaChen on 16/11/18.
 */

/**
 * 格式化时间字符串 formatStrTime
 * Parse the time to string
 * 例 <span>收录日期：{{item.data.BiRelDate | formatStrTime('yyyy-MM-dd')}}</span>
 * 
 * 'yyyy-MM-dd hh:mm:ss.S'
 * 
 * @param {(Object|string|number)} time
 * @param {string} cFormat
 * @returns {string}
 */
export function formatStrTime(date, fmt) {
    fmt = fmt ? fmt : 'yyyy-MM-dd';
    var date = new Date(date);
    date = AddHours(date, 8);// 加8小时
    if (/(y+)/.test(fmt)) {
        fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
    }
    var o = {
        'M+': date.getMonth() + 1,
        'd+': date.getDate(),
        'h+': date.getHours(),
        'm+': date.getMinutes(),
        's+': date.getSeconds(),
        'S+': date.getMilliseconds()
    };
    for (var k in o) {
        if (new RegExp('(' + k + ')').test(fmt)) {
            var str = o[k] + '';
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? str : ('00' + str).substr(str.length));
        }
    }
    return fmt;
}

/**
 * parseTime
 * @param {*} time 
 * @param {*} cFormat 
 */
export function parseTime(time, cFormat) {
    if (arguments.length === 0) {
        return null
    }
    const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'
    let date
    if (typeof time === 'object') {
        date = time
    } else {
        if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {
            time = parseInt(time)
        }
        if ((typeof time === 'number') && (time.toString().length === 10)) {
            time = time * 1000
        }
        date = new Date(time)
    }
    const formatObj = {
        y: date.getFullYear(),
        m: date.getMonth() + 1,
        d: date.getDate(),
        h: date.getHours(),
        i: date.getMinutes(),
        s: date.getSeconds(),
        a: date.getDay()
    }
    const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
        let value = formatObj[key]
        // Note: getDay() returns 0 on Sunday
        if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value] }
        if (result.length > 0 && value < 10) {
            value = '0' + value
        }
        return value || 0
    })
    return time_str
}

/**
 * @param {number} time
 * @param {string} option
 * @returns {string}
 */
export function formatTime(time, option) {
    if (('' + time).length === 10) {
        time = parseInt(time) * 1000
    } else {
        time = +time
    }
    const d = new Date(time)
    const now = Date.now()

    const diff = (now - d) / 1000

    if (diff < 30) {
        return '刚刚'
    } else if (diff < 3600) {
        // less 1 hour
        return Math.ceil(diff / 60) + '分钟前'
    } else if (diff < 3600 * 24) {
        return Math.ceil(diff / 3600) + '小时前'
    } else if (diff < 3600 * 24 * 2) {
        return '1天前'
    }
    if (option) {
        return parseTime(time, option)
    } else {
        return (
            d.getMonth() +
            1 +
            '月' +
            d.getDate() +
            '日' +
            d.getHours() +
            '时' +
            d.getMinutes() +
            '分'
        )
    }
}

/**
 * @param {string} url
 * @returns {Object}
 */
export function param2Obj(url) {
    const search = url.split('?')[1]
    if (!search) {
        return {}
    }
    return JSON.parse(
        '{"' +
        decodeURIComponent(search)
            .replace(/"/g, '\\"')
            .replace(/&/g, '","')
            .replace(/=/g, '":"')
            .replace(/\+/g, ' ') +
        '"}'
    )
}

/**
 * 加减日期
 * @param {*} date 
 * @param {*} addDays 
 */
export function AddDate(date, addDays){ 
    // var Dates = new Date(date);// date传入你需要的日期，格式"xxxx-xx-xx"。addDays传要加减的日期数，往前传正数，往后传负数
    var Dates = new Date(date.valueOf());
    Dates.setDate(Dates.getDate() + addDays);
    var mon = Dates.getMonth() + 1,
        day = Dates.getDate();
    if(mon < 10){
        mon = "0" + mon;//月份小于10，在前面补充0
    }
    if(day < 10){
        day = "0" + day;//日小于10，在前面补充0
    }
    // return Dates.getFullYear() + "-" + mon + "-" +day;
    return Dates;
}

/**
 * 加减小时
 * @param {*} date 
 * @param {*} hours 
 */
export function AddHours(date, hours){ 
    var Dates = new Date(date.valueOf());
    Dates.setHours(Dates.getHours() + hours);
    return Dates;
}